﻿using SMS.dao;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data;


namespace SMS.cntr
{
    public class ClazzCntr
    {
        private static readonly ClazzCntr INSTANCE = new ClazzCntr();

        public static ClazzCntr Instance
        {
            get
            {
                return INSTANCE;
            }
        }

        private ClazzCntr() { }

        public DataTable listAll()
        {
            return ClazzDao.Instance.findAll();
        }
		
		//=============================Quang
        public bool createClazz(string clazzName, string clazzCapacity,int blockID) 
        {
            if (validateCreatingClazz(clazzName, clazzCapacity, blockID))
            {
                int result = ClazzDao.Instance.insert(clazzName, clazzCapacity,blockID);
                return result == 1 ? true : false;
            }
            return false;
        }



        private bool validateCreatingClazz(string clazzName, string clazzCapacity, int blockID ) 
        {
            int clazzMaxCapacity = PreferenceCntr.Instance.getClazzCapacity();
            if (clazzName.Equals("")){ MessageBox.Show("Bạn chưa nhập tên lớp !"); return false; }
            else if (clazzCapacity.Equals("")){ MessageBox.Show("Bạn chưa nhập số lượng học sinh !"); return false; }
            else if (Int32.Parse(clazzCapacity) > clazzMaxCapacity)
            {
                MessageBox.Show("Số lượng học sinh cho phép tối đa trong lớp là: " + clazzMaxCapacity.ToString());
                return false;
            }
            return true;
        }

        public void delete(int clazzID)
        {
            if (validateDeleteClazz(clazzID))
            {
                int result = ClazzDao.Instance.deleteClazzInNull(clazzID);
                if (result == 1)
                {
                    MessageBox.Show("Xóa lớp thành công !");
                }
            }
        }

        public bool validateDeleteClazz(int clazzID)
        {
            if ((countStudentInCLazz(clazzID)) != 0)
            {
                MessageBox.Show("Lớp đã tồn tại học sinh, không được xóa. Mời hủy đăng kí học sinh trước !");
                return false;
            }
            return true;
        }

        public void update(int clazzID, String clazzName, string clazzCapacity)
        {
            if (validateUpdateClazz(clazzID, clazzName, clazzCapacity))
            {
                int result = ClazzDao.Instance.update(clazzID, clazzName, clazzCapacity);

                if (result == 1)
                {
                    MessageBox.Show("Cập nhật thành công !");
                }
            }
        }

        public bool validateUpdateClazz(int clazzID, String clazzName, string clazzCapacity)
        {
            DataTable dt = ClazzDao.Instance.findClazzName(clazzName);
            int id = ClazzDao.Instance.getID(clazzName);
            int currentCapacity = countStudentInCLazz(clazzID);
            int maxCapacity = PreferenceCntr.Instance.getClazzCapacity();
            if (clazzName.Equals("")) { MessageBox.Show("Mời điền tên cho khối"); return false; }
            else if (clazzCapacity.Equals("")) { MessageBox.Show("Mời điền sĩ số tối đa muốn cập nhật"); return false; }
            else if (dt.Rows.Count == 1) 
            {
                if (id != clazzID)
                {
                    MessageBox.Show("Đã có lớp có tên này");
                    return false;
                }
                else if (int.Parse(clazzCapacity) < currentCapacity || int.Parse(clazzCapacity) > maxCapacity)
                {
                    MessageBox.Show("Sĩ số cần cập nhật không được nhỏ hơn sĩ số hiện tại của lớp là: " + currentCapacity.ToString() + " và không được lớn hơn sĩ số tối đa cho phép là " + maxCapacity.ToString());
                    return false;
                }
                return true;
            }
            else if (int.Parse(clazzCapacity) < currentCapacity || int.Parse(clazzCapacity) > maxCapacity)
            {
                MessageBox.Show("Sĩ số cần cập nhật không được nhỏ hơn sĩ số hiện tại của lớp là: " + currentCapacity.ToString() + " và không được lớn hơn sĩ số tối đa cho phép là " + maxCapacity.ToString());
                return false;
            }            
            return true;
        }

        public int countStudentInCLazz(int clazzID) 
        {
            DataTable student = StudentDao.Instance.findStudents(clazzID.ToString());
            return student.Rows.Count;
        }

        public DataTable findClazzByBlock(int blockID)
        {
            return ClazzDao.Instance.findClazzByBlock(blockID);
        }
        //==============================================
    }
}
